#-----------------------------------------------------
# instalar librería tidyverse si no está ya instalada
if (!"tidyverse" %in% rownames(installed.packages())) {
cat("La librería tidyverse se va a instalar...\n")
install.packages("tidyverse")
} else {
cat("La librería tidyverse está instalada.\n")
}
## La librería tidyverse está instalada.
if (!"datos" %in% rownames(installed.packages())) {
cat("La librería datos se va a instalar...\n")
install.packages("datos")
} else {
cat("La librería datos está instalada.\n")
}
## La librería datos está instalada.
# cargar la librerías
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(plotly) # para gráficos interactivos
##
## Adjuntando el paquete: 'plotly'
##
## The following object is masked from 'package:ggplot2':
##
## last_plot
##
## The following object is masked from 'package:stats':
##
## filter
##
## The following object is masked from 'package:graphics':
##
## layout
library(datos) # conjunto de datos con los que vamos a trabajar
millas
## # A tibble: 234 × 11
## fabricante modelo cilindrada anio cilindros transmision traccion ciudad
## <chr> <chr> <dbl> <int> <int> <chr> <chr> <int>
## 1 audi a4 1.8 1999 4 auto(l5) d 18
## 2 audi a4 1.8 1999 4 manual(m5) d 21
## 3 audi a4 2 2008 4 manual(m6) d 20
## 4 audi a4 2 2008 4 auto(av) d 21
## 5 audi a4 2.8 1999 6 auto(l5) d 16
## 6 audi a4 2.8 1999 6 manual(m5) d 18
## 7 audi a4 3.1 2008 6 auto(av) d 18
## 8 audi a4 quattro 1.8 1999 4 manual(m5) 4 18
## 9 audi a4 quattro 1.8 1999 4 auto(l5) 4 16
## 10 audi a4 quattro 2 2008 4 manual(m6) 4 20
## # ℹ 224 more rows
## # ℹ 3 more variables: autopista <int>, combustible <chr>, clase <chr>
# Lo asignamos a un objeto con el mismo nombre
millas <- millas
help(millas)
## starting httpd help server ... done
## 1. lienzo -----------------------------------
# Crea el lienzo donde se dibujarán los datos
ggplot(data = millas)

## 2. Propiedades estéticas a las variables
# aes en la función ggplot
ggplot(data = millas, aes(x = cilindrada,
y = autopista))

## 3. Capa de geometría (puntos)
ggplot(data = millas, aes(x = cilindrada, y = autopista)) +
geom_point()

## 4. Capa de geometría (puntos)
# Propiedad color para la variable clase
# aes en capa geom.
# x : cilindrada
# y : autopista
# color: clase
ggplot(data = millas) +
geom_point(mapping = aes(x = cilindrada,
y = autopista,
color = clase))

## 5. Capa de geometría (puntos)
# Todos los puntos iguales : color fuera de aes
ggplot(data = millas) +
geom_point(mapping = aes(x = cilindrada,
y = autopista),
color = 'blue')

## 6. Capa de geometría (puntos)
# Forma de los puntos: shape
# forma específica para todos los puntos
ggplot(data = millas) +
geom_point(mapping = aes(x = cilindrada,
y = autopista,
color = clase),
shape = 4)

## 7. Capa de geometría (puntos)
# Tamaño de los puntos: size
ggplot(data = millas) +
geom_point(aes(x = cilindrada,
y = autopista,
size = cilindros),
color = "coral")

# Para ver la gama de colores:
demo("colors")
##
##
## demo(colors)
## ---- ~~~~~~
##
## > ### ----------- Show (almost) all named colors ---------------------
## >
## > ## 1) with traditional 'graphics' package:
## > showCols1 <- function(bg = "gray", cex = 0.75, srt = 30) {
## + m <- ceiling(sqrt(n <- length(cl <- colors())))
## + length(cl) <- m*m; cm <- matrix(cl, m)
## + ##
## + require("graphics")
## + op <- par(mar=rep(0,4), ann=FALSE, bg = bg); on.exit(par(op))
## + plot(1:m,1:m, type="n", axes=FALSE)
## + text(col(cm), rev(row(cm)), cm, col = cl, cex=cex, srt=srt)
## + }
##
## > showCols1()
##
## > ## 2) with 'grid' package:
## > showCols2 <- function(bg = "grey", cex = 0.75, rot = 30) {
## + m <- ceiling(sqrt(n <- length(cl <- colors())))
## + length(cl) <- m*m; cm <- matrix(cl, m)
## + ##
## + require("grid")
## + grid.newpage(); vp <- viewport(width = .92, height = .92)
## + grid.rect(gp=gpar(fill=bg))
## + grid.text(cm, x = col(cm)/m, y = rev(row(cm))/m, rot = rot,
## + vp=vp, gp=gpar(cex = cex, col = cm))
## + }
##
## > showCols2()
## Cargando paquete requerido: grid


##
## > showCols2(bg = "gray33")

##
## > ###
## >
## > ##' @title Comparing Colors
## > ##' @param col
## > ##' @param nrow
## > ##' @param ncol
## > ##' @param txt.col
## > ##' @return the grid layout, invisibly
## > ##' @author Marius Hofert, originally
## > plotCol <- function(col, nrow=1, ncol=ceiling(length(col) / nrow),
## + txt.col="black") {
## + stopifnot(nrow >= 1, ncol >= 1)
## + if(length(col) > nrow*ncol)
## + warning("some colors will not be shown")
## + require(grid)
## + grid.newpage()
## + gl <- grid.layout(nrow, ncol)
## + pushViewport(viewport(layout=gl))
## + ic <- 1
## + for(i in 1:nrow) {
## + for(j in 1:ncol) {
## + pushViewport(viewport(layout.pos.row=i, layout.pos.col=j))
## + grid.rect(gp= gpar(fill=col[ic]))
## + grid.text(col[ic], gp=gpar(col=txt.col))
## + upViewport()
## + ic <- ic+1
## + }
## + }
## + upViewport()
## + invisible(gl)
## + }
##
## > ## A Chocolate Bar of colors:
## > plotCol(c("#CC8C3C", paste0("chocolate", 2:4),
## + paste0("darkorange", c("",1:2)), paste0("darkgoldenrod", 1:2),
## + "orange", "orange1", "sandybrown", "tan1", "tan2"),
## + nrow=2)

##
## > ##' Find close R colors() to a given color {original by Marius Hofert)
## > ##' using Euclidean norm in (HSV / RGB / ...) color space
## > nearRcolor <- function(rgb, cSpace = c("hsv", "rgb255", "Luv", "Lab"),
## + dist = switch(cSpace, "hsv" = 0.10, "rgb255" = 30,
## + "Luv" = 15, "Lab" = 12))
## + {
## + if(is.character(rgb)) rgb <- col2rgb(rgb)
## + stopifnot(length(rgb <- as.vector(rgb)) == 3)
## + Rcol <- col2rgb(.cc <- colors())
## + uniqC <- !duplicated(t(Rcol)) # gray9 == grey9 (etc)
## + Rcol <- Rcol[, uniqC] ; .cc <- .cc[uniqC]
## + cSpace <- match.arg(cSpace)
## + convRGB2 <- function(Rgb, to)
## + t(convertColor(t(Rgb), from="sRGB", to=to, scale.in=255))
## + ## the transformation, rgb{0..255} --> cSpace :
## + TransF <- switch(cSpace,
## + "rgb255" = identity,
## + "hsv" = rgb2hsv,
## + "Luv" = function(RGB) convRGB2(RGB, "Luv"),
## + "Lab" = function(RGB) convRGB2(RGB, "Lab"))
## + d <- sqrt(colSums((TransF(Rcol) - as.vector(TransF(rgb)))^2))
## + iS <- sort.list(d[near <- d <= dist])# sorted: closest first
## + setNames(.cc[near][iS], format(zapsmall(d[near][iS]), digits=3))
## + }
##
## > nearRcolor(col2rgb("tan2"), "rgb")
## 0.0 21.1 25.8 29.5
## "tan2" "tan1" "sandybrown" "sienna1"
##
## > nearRcolor(col2rgb("tan2"), "hsv")
## 0.0000 0.0410 0.0618 0.0638 0.0667 0.0766
## "tan2" "sienna2" "coral2" "tomato2" "tan1" "coral"
## 0.0778 0.0900 0.0912 0.0918
## "sienna1" "sandybrown" "coral1" "tomato"
##
## > nearRcolor(col2rgb("tan2"), "Luv")
## 0.00 7.42 7.48 12.41 13.69
## "tan2" "tan1" "sandybrown" "orange3" "orange2"
##
## > nearRcolor(col2rgb("tan2"), "Lab")
## 0.00 5.56 8.08 11.31
## "tan2" "tan1" "sandybrown" "peru"
##
## > nearRcolor("#334455")
## 0.0867
## "darkslategray"
##
## > ## Now, consider choosing a color by looking in the
## > ## neighborhood of one you know :
## >
## > plotCol(nearRcolor("deepskyblue", "rgb", dist=50))

##
## > plotCol(nearRcolor("deepskyblue", dist=.1))

##
## > plotCol(nearRcolor("tomato", "rgb", dist= 50), nrow=3)

##
## > plotCol(nearRcolor("tomato", "hsv", dist=.12), nrow=3)

##
## > plotCol(nearRcolor("tomato", "Luv", dist= 25), nrow=3)

##
## > plotCol(nearRcolor("tomato", "Lab", dist= 18), nrow=3)

## 8. Capa labs (títulos y etiquetas)
#
g <-ggplot(millas, aes(x = cilindrada,
y = ciudad,
color = clase)) +
geom_point() +
labs(
title = "Relación entre cilindrada y Consumo en ciudad",
subtitle = "Consumo de combustible de varios modelos de autos",
x = "Cilindrada del Motor",
y = "Recorrido en ciudad (millas por galón)",
color = "Tipo de Vehículo",
caption = "Fuente: Dataset millas"
)
g

p <-ggplotly(g)
p
htmlwidgets::saveWidget(p, "grafico_interactivo.html", selfcontained = TRUE)
## 8. Capa facets
# facet_wrap() : Crea una matriz de subgráficos para una única variable categórica
# de facetado.
# Cada valor de la variable tiene su propio subgráfico.
# Gráfico de dispersión con facetas para cada clase de vehículo
ggplot(millas, aes(x = cilindrada, y = ciudad)) +
geom_point() +
facet_wrap(~ traccion) +
labs(
title = "Relación entre Cilindrada y Consumo en Ciudad",
x = "Cilindrada",
y = "Consumo en Ciudad (millas por galón)"
)

## 9. Capa facets
# facet_grid() : Crea una cuadrícula de subgráficos basados en una o dos variables
# de facetado
# Gráfico de dispersión con facetas para combinaciones de combustible y tracción
ggplot(millas, aes(x = cilindrada, y = ciudad, color = clase)) +
geom_point() +
facet_grid(combustible ~ traccion)

## 10. Capa Themes : estilo de gráfico: colores, líneas y bordes, títulos, fondo, ...
#
ggplot(millas, aes(x = cilindrada, y = ciudad, color = clase)) +
geom_point() +
facet_grid(combustible ~ traccion) +
theme_bw()

ggplot(millas, aes(x = clase, y = ciudad)) +
geom_point() +
labs(
title = "Relación clase - eficiencia en ciudad",
x = "Clase de vehículo",
y = "eficiencia en ciudad"
) +
theme_minimal() +
theme(
plot.title = element_text(size = 18, face = "bold", color = "blue"), # Título más grande y en negrita
axis.title.y = element_text(size = 20),
axis.title.x = element_text(size = 10), # # Tamaño del texto de los ejes
axis.text = element_text(color = "red"), # Color rojo para los números de los ejes
axis.text.x = element_text(angle = 45, hjust = 1),
panel.background = element_rect(fill = "white"), # Fondo blanco en el panel
plot.background = element_rect(fill = "lightyellow") # Fondo amarillo claro para todo el gráfico
)

## TIPOS DE GRÁFICOS
## 1. BARRAS (VARIABLE DISCRETA)
# eje y se muestra el recuento (count)
ggplot(data=millas)+
geom_bar(mapping=aes(x=clase),
# stat = "count" # estadística por defecto
)

# eje y se muestra una proporción
ggplot(data = millas) +
geom_bar(mapping = aes(x = clase,
y = after_stat(prop),
group = 1))

## 2. BARRAS (VARIABLE DISCRETA) - Propiedad : fill para el color de relleno
ggplot(data=millas)+
geom_bar(mapping=aes(x=traccion, fill = clase) )

## 3. BARRAS (VARIABLE DISCRETA) - Propiedad : fill para el color de relleno
# Posición de las barras
ggplot(data=millas)+
geom_bar(mapping=aes(x=traccion, fill = clase),
position = 'dodge')

ggplot(data=millas)+
geom_bar(mapping=aes(x=traccion, fill = clase),
color = 'black',
position = 'dodge')

## 4. HISTOGRAMA (VARIABLE CONTINUA)
ggplot(data=millas)+
geom_histogram(mapping=aes(x=autopista) ) +
labs(title = "Distribución de Autonomía en autopista",
x = "Autonomía en Carretera (mpg)",
y = "Frecuencia")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

## 5. HISTOGRAMA (VARIABLE CONTINUA) - Propiedad fill: para diferenciar por una varaible
# millas recorridas por litro de combustible en autopista
ggplot(data=millas)+
geom_histogram(mapping=aes(x=autopista, fill = traccion)) +
labs(title = "Distribución de Autonomía en autopista",
x = "Millas recorridas por litro en autopista",
y = "Frecuencia")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

## 6. DENSIDAD (VARIABLE CONTINUA) - Propiedad fill: para diferenciar por una variable
# El eje y representa la densidad en lugar de los conteos.
# Si sumas el área de todas las barras, dará 1.
ggplot(data = millas, aes(x = autopista)) +
geom_histogram(aes(y = after_stat(density)))+
geom_density( alpha = 0.5,
fill = 'red') +
labs(title = "Distribución de Densidad de Autonomía en autopista",
x = "Millas recorridas por litro en autopista",
y = "Densidad")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

## 7. DENSIDAD (VARIABLE CONTINUA) - Propiedad fill: para diferenciar por una variable
ggplot(data = millas) +
geom_density(aes(x = autopista, fill = traccion),
alpha = 0.7) +
labs(title = "Distribución de Densidad de Autonomía en autopista",
x = "Millas recorridas por litro en autopista",
y = "Densidad")

## 8. Scatter Plot - Diagramas de dispersión
ggplot(data = millas) +
geom_point(mapping = aes(x = cilindrada,
y = autopista,
color = clase))

ggplot(data = millas) +
geom_point(aes(x = ciudad, y = autopista, color = traccion),
alpha = 0.7) +
labs(title = "Relación entre Millas por Galón en Ciudad y autopista",
x = "Millas por Galón en Ciudad",
y = "Millas por Galón en autopista",
color = "Tracción")

## 9. Líneas de tendencia
# geom_smooth() se utiliza para agregar líneas de tendencia
# o curvas de suavizado
ggplot(data=millas)+
geom_point(mapping=aes(x=ciudad, y=cilindrada), color="Blue") +
geom_smooth(mapping=aes(x=ciudad, y=cilindrada), color="Red") +
labs(title = "Relación entre consumo en Ciudad y \ncilindrada con Línea de Tendencia",
x = "Millas por Galón en Ciudad",
y = "Cilindrada del motor")
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'

## 10. Líneas de tendencia
# geom_smooth() se utiliza para agregar líneas de tendencia o curvas de suavizado
#
# loess(suavizado local): Para una relación no lineal.
# LOESS realiza ajustes en segmentos locales de los datos,
# lo que permite capturar patrones no lineales.
# lm (regresión lineal): Para una relación lineal
ggplot(data=millas)+
geom_point(mapping=aes(x=ciudad, y=cilindrada), color="Blue") +
geom_smooth(mapping=aes(x=ciudad, y=cilindrada),
method = 'lm',
color="Red") +
labs(title = "Relación entre consumo en Ciudad y \ncilindrada con Línea de Tendencia",
x = "Millas por Galón en Ciudad",
y = "Cilindrada del motor")
## `geom_smooth()` using formula = 'y ~ x'

ggplot(data=millas)+
geom_point(mapping=aes(x=ciudad, y=cilindrada), color="Blue") +
geom_smooth(mapping=aes(x=ciudad, y=cilindrada),
level = 0.95, # nivel de confianza
color="Red")
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'

## 11. BARRAS - Una variable discreta y una continua
# calculo la media de millas recorridas en ciudad
# por clase de vehículo
eficiencia <- millas %>%
group_by(clase) %>%
summarise(recorrido_medio = mean(ciudad))
eficiencia
## # A tibble: 7 × 2
## clase recorrido_medio
## <chr> <dbl>
## 1 2asientos 15.4
## 2 compacto 20.1
## 3 mediano 18.8
## 4 minivan 15.8
## 5 pickup 13
## 6 subcompacto 20.4
## 7 suv 13.5
ggplot(data = eficiencia) +
geom_col(aes(x = clase, y = recorrido_medio),
fill = "skyblue",
color = "black") +
labs(title = "Recorrido Promedio por clase de vehículo",
x = "Clase de vehículo",
y = "Recorrido Promedio (Millas)")

## 12. BARRAS Y ETIQUETAS
ggplot(data = eficiencia) +
geom_col(aes(x = clase,
y = recorrido_medio),
fill = "skyblue", color = "black") +
geom_text(aes(x = clase,
y = recorrido_medio,
label = round(recorrido_medio, 2)), vjust = 1.5
) +
labs(title = "Recorrido Promedio por clase de vehículo",
x = "Clase de vehículo",
y = "Recorrido Promedio (Millas)")

## 13. CAJAS Y BIGOTES - Una variable continua
# Diagrama de cajas y bigotes para la variable continua ciudad
ggplot(data = millas) +
geom_boxplot(aes(x = ciudad),
color = "black", outlier.colour = "red")

# Diagrama de cajas y bigotes para la variable continua ciudad
# por clase de vehículo
ggplot(data = millas) +
geom_boxplot(aes(x = clase,
y = ciudad),
outlier.colour = "red")

g <- ggplot(data = millas) +
geom_point(aes(x = cilindrada,
y = autopista,
color = clase))
p <-ggplotly(g)
#htmlwidgets::saveWidget(p, "grafico_interactivo.html", selfcontained = TRUE)
show(p)